<?php
    include_once 'common.php';
    $name='uploadName';
    function CheckUploadError(){
    	//PHP上传失败
    	if (!empty($_FILES[$GLOBALS['name']]['error'])) {
    		switch($_FILES[$GLOBALS['name']]['error']){
    			case '1':
    				$error = '超过php.ini允许的大小。';
    				break;
    			case '2':
    				$error = '超过表单允许的大小。';
    				break;
    			case '3':
    				$error = '图片只有部分被上传。';
    				break;
    			case '4':
    				$error = '请选择图片。';
    				break;
    			case '6':
    				$error = '找不到临时目录。';
    				break;
    			case '7':
    				$error = '写文件到硬盘出错。';
    				break;
    			case '8':
    				$error = 'File upload stopped by extension。';
    				break;
    			//case '999':
    			default:
    				$error = '未知错误。';
    				break;
    		}
    		AlertBack($error);
    		exit();
    	}
    }
    /**
     * 目录如果不存在，则先创建目录
     * @param unknown $save_path
     */
    function CheckPathExists($save_path){
    	if (!file_exists($save_path)) {
    		mkdir($save_path);
    	}
    }
    /**
     * 检查要上传的文件名
     * @param 文件名 $file_name
     */
    function CheckFileName($file_name){
    	if (!$file_name) {
    		AlertBack("请选择文件。");
    		exit();
    	}
    }
    /**
     * 检查上传目录是否存在
     * @param 上传目录 $save_path
     */
    function CheckSavePath($save_path){
    	if (@is_dir($save_path) === false) {
    		AlertBack("上传目录不存在。");
    		exit();
    	}
    }
    /**
     * 检查目录写权限
     * @param 上传目录 $save_path
     */
    function CheckWritable($save_path){
    	if (@is_writable($save_path) === false) {
    		AlertBack("上传目录没有写权限。");
    		exit();
    	}
    }
    /**
     * 检查是否已上传
     * @param 上传文件名 $tmp_name
     */
    function CheckIsUploaded($tmp_name){
    	if (@is_uploaded_file($tmp_name) === false) {
    		AlertBack("上传失败。");
    	}
    }
    /**
     * 检查文件大小
     * @param 文件大小 $file_size
     */
    function CheckSize($file_size){
    	$max_size=1000000;
    	if ($file_size > $max_size||$file_size<=0) {
    		AlertBack("上传文件大小超过限制。");
    		exit();
    	}
    }
    /**
     * 检查扩展名
     * @param 文件名 $file_name
     * @param 扩展名 $dir_name
     */
    function CheckExtName($file_name,$dir_name){
    	//定义允许上传的文件扩展名
    	$ext_arr = array(
    			'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
    			'flash' => array('swf', 'flv'),
    			'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
    			'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
    	);
    	 
    	$temp_arr = explode(".", $file_name);
    	$file_ext = array_pop($temp_arr);
    	$file_ext = trim($file_ext);
    	$file_ext = strtolower($file_ext);
    	//检查扩展名
    	if (in_array($file_ext, $ext_arr[$dir_name]) === false) {
    		AlertBack("上传文件扩展名是不允许的扩展名。\\n只允许" . implode(",", $ext_arr[$dir_name]) . "格式。");
    		//echo $file_ext;
    		exit();
    	}
    	else {
    		return $file_ext;
    	}
    }
    /**
     * 上传文件
     * @param 保存目录 $save_path
     * @param file input 的name属性 $name
     * @param 文件类型（image,flash,media,file） $dir_name
     */
    function Upload($save_path,$name,$dir_name){
    	$GLOBALS['name']=$name;
    	CheckUploadError();
    	
    	if (empty($_FILES) === false){
	    	//原文件名
	    	$file_name = $_FILES[$GLOBALS['name']]['name'];
	    	//服务器上临时文件名
	    	$tmp_name = $_FILES[$GLOBALS['name']]['tmp_name'];
	    	//文件大小
	    	$file_size = $_FILES[$GLOBALS['name']]['size'];
	    	
	    	CheckFileName($file_name);
	    	CheckSavePath($save_path);
	    	CheckWritable($save_path);
	    	CheckIsUploaded($tmp_name);
	    	CheckSize($file_size);
	    	$file_ext = CheckExtName($file_name, $dir_name);
	    	CheckPathExists($save_path);
	    	//新文件名
	    	$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
	    	//移动文件
	    	$file_path = $save_path .'/'. $new_file_name;
	    	
	    	if (move_uploaded_file($tmp_name, $file_path) === false) {
	    		AlertBack("上传文件失败。");
	    		return false;
	    	}
	    	else {
	    		return $new_file_name;
	    	}
    	}
    }